# 安装必要的包，添加Docker的官⽅GPG密钥
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 首先确保系统已安装curl和gnupg等工具：
sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
# 下载Docker官方GPG密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

# 添加阿⾥云镜像的Docker APT源
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# 更新APT包索引
sudo apt update

# 如果出现⿊体字的警告可以有两种选择：
# 1：忽略，不影响任何操作
# 2：运⾏以下命令，把密钥复制到信任⽬录
sudo cp /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d

#安装Docker CE（Community Edition），时间较⻓
sudo apt install docker-ce docker-ce-cli containerd.io -y

 
# 查看状态
sudo systemctl status docker

# 查看版本
sudo docker version

# 设置开机⾃启动
sudo systemctl enable docker

# 查看是否开机启动
sudo systemctl list-unit-files | grep docker.service

# 重新加载服务配置
sudo systemctl daemon-reload

 
# 停⽌防⽕墙 
sudo systemctl stop ufw

# 查看防⽕墙
sudo systemctl status ufw

# 禁⽤防⽕墙开机⾃启动 
sudo systemctl disable ufw

 
# 查看运⾏的容器列表
docker ps

# 创建⽬录
mkdir -p /bit/mysql/master/conf
mkdir -p /bit/mysql/master/mysql

# 安装MySQL镜像
docker run -d \
-p 53306:3306 \
-v /bit/mysql/master/conf:/etc/mysql/conf.d \
-v /bit/mysql/master/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name bit-mysql-master mysql:8.0.38

# 修改镜像源
vim /etc/docker/daemon.json
# 代码块
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://dockerhub.timeweb.cloud",
        "https://huecker.io"
    ]
}

# 重新加载服务配置
sudo systemctl daemon-reload

# 重启 Docker 服务
sudo systemctl restart docker
# 验证镜像源配置
docker info

# 进⼊Docker容器，env LANG=C.UTF-8避免中⽂乱码问题
docker exec -it bit-mysql-master env LANG=C.UTF-8 /bin/bash
# 运⾏Mysql客⼾端
mysql -uroot -p
# 修改root⽤⼾密码
mysql> SET PASSWORD = '123456';

# my.cnf 配置项
# MySQL服务器节点 
[mysqld]
# 服务器唯⼀id, 默认值为1 
server-id=13803306
# ⼆进制⽇志基本名, Linux下默认为binlog, window下默认为"机器名-bin" 
# ⽣产环境推荐⾃定义⽇志路径
log-bin=binlog
# ⼆进制⽇志的格式，默认为ROW，⽣产环境也推荐⽤ROW 
binlog_format=ROW
# ⼆进制⽇志过期时间，指定10天，默认30天
binlog_expire_logs_seconds=864000
# 在事务提交之前把⼆进制⽇志写⼊磁盘
sync-binlog=1

# 指定需要复制的数据库，默认复制全部数据库
# binlog-do-db=db_name
# 设置不需要复制的数据库，每⾏指定⼀个数据库，可以配置多⾏
# binlog-ignore-db=db_name1
# binlog-ignore-db=db_name2

# 重启容器
docker restart bit-mysql-master

-- 创建⼀个⽤于主从复制的⽤⼾，指定密码加密⽅式为 mysql_native_password  
create user 'bit_slave'@'%' identified with mysql_native_password by '123456';

-- 为⽤⼾赋予复制权限
grant REPLICATION SLAVE on *.* to 'bit_slave'@'%';

-- 刷新权限
flush privileges;

-- 查看用户是否生效
select u.host, u.user, u.Repl_slave_priv from mysql.user u;

-- 查看主机状态
show master status;


########################### 从服务器配置 ################################## 
# 中继⽇志基本名，默认为"机器名-relay-bin"，也可以指定⾃定义路径
relay-log = relay-bin
# 服务器启动时不启动复制，稍后⼿动启动使⽤ start REPLICA 语句。

# MySQL8.0.26 之前⽤skip-slave-start=ON，稍后⼿动启动使⽤start SLAVE语句。
skip-replica-start=ON

# SQL线程执⾏的更新写⼊副本⾃⼰的⼆进制⽇志，MySQL8.0.26之前⽤log_slave_updates=ON 
# 如果要实现 "A服务器 <-- B服务器 <-- C服务器" 这种链式⽇志同步，则B服务器即是主⼜是从，需要开启该选项
# log-replica-updates=ON

# 禁⽤⼆进制⽇志
 
# skip-log-bin

###########################################################################
# 指定需要复制的数据库，默认复制全部数据库
# binlog-do-db=db_name
# 设置不需要复制的数据库，每⾏指定⼀个数据库，可以配置多⾏ 
# binlog-ignore-db=db_name1
# binlog-ignore-db=db_name2
 
# 在从服务器上配置主从的 sql
CHANGE MASTER TO 
    MASTER_HOST = '49.233.162.74',
    MASTER_PORT = 53306,
    MASTER_USER = 'bit_slave',
    MASTER_PASSWORD = '123456',
    MASTER_LOG_FILE = 'binlog.000006',
    MASTER_LOG_POS = 157;


CHANGE REPLICATION SOURCE TO SOURCE_HOST='49.233.162.74', SOURCE_USER='bit_slave', SOURCE_PASSWORD='123456', SOURCE_LOG_FILE='binlog.000003', SOURCE_LOG_POS=670;

# 启动主从复制
start replica;

# 查看从服务器状态
mysql> SHOW REPLICA STATUS\G


# 在主节点中插入数据
-- 创建数据库
create database if not exists bit_db character set utf8mb4 collate utf8mb4_0900_ai_ci;
-- 选中数据库
use bit_db;
-- 创建表
create table if not exists t_user (id bigint primary key auto_increment, name varchar(20) not null);
-- 写入数据
insert into t_user (name) values ('张三');



